/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ejerciciomatriz;

/**
 *
 * @author AdminLocal
 */
public class ContadorPalabras
{

    private InfoPalabra[][] matriz;
    private final int base = 'a';

    public ContadorPalabras()
    {
        //vector de vectores
        matriz = new InfoPalabra[26][0];
//        for (InfoPalabra[] ip : matriz)
//        {
//            ip = new InfoPalabra[0];
//        }
    }

    public void añadirPalabra(String nuevaPalabra)
    {
        String palabraEnMinusculas = nuevaPalabra.toLowerCase();
        int caracterInicial = palabraEnMinusculas.charAt(0);
        int posicion = caracterInicial - base;
        añadirPalabra(posicion,nuevaPalabra);
    }

    private void añadir(int posicionLetra, String nuevaPalabra)
    {
        InfoPalabra[] palabras = matriz[posicionLetra];
        InfoPalabra[] nuevaLista = new InfoPalabra[palabras.length + 1];
        for(int i = 0 ; i < palabras.length ; i++)
        {
            nuevaLista[i] = palabras[i];
        }
        InfoPalabra nueva = new InfoPalabra();
        nueva.palabra = nuevaPalabra;
        nueva.apariciones = 1;
        nuevaLista[nuevaLista.length - 1] = nueva;
        matriz[posicionLetra] = nuevaLista;
    }

    private void añadirPalabra(int posicionLetra, String nuevaPalabra)
    {
        InfoPalabra[] palabras = matriz[posicionLetra];
        int posicion = posicionPalabra(palabras,nuevaPalabra);
        if(posicion>-1)
        {
            palabras[posicion].apariciones++;
        }
        else
        {
            añadir(posicionLetra,nuevaPalabra);
        }
    }

    private int posicionPalabra(InfoPalabra[] infoPalabra, String nuevaPalabra)
    {
        int posicion = -1;
        int contador = 0;
        while(contador < infoPalabra.length && posicion == -1)
        {
            if(infoPalabra[contador].palabra.toLowerCase().equals(nuevaPalabra.toLowerCase()))
            {
                posicion = contador;
            }
            contador++;
        }
        return posicion;
    }

    @Override
    public String toString()
    {
        String cadena = "";
        for(InfoPalabra[] ip : matriz)
        {
            for(InfoPalabra i : ip)
            {
                cadena += "Palabra: " + i.palabra + "\t\t" + "Apariciones: " + i.apariciones + "\n";
            }
        }
        return cadena;
    }
}
